#include <stdio.h>
#include "single_linked_list.cpp"
#include <map>
#include <cmath>

using namespace std;
// 用单链表存储m个整数 |data| <= n
// 对链表中data的绝对值相等的点
// 仅保留一次出现的结点 而删除其他绝对值相等的点

// 使用map记录
void DelAbsEqulNum(LinkedList &L) {
	map	<int,bool> mp;
	LNode *ptr = L;
	while(ptr->next) {
		if (mp.find(abs(ptr->next->data)) != mp.end()) {
			// 删除
			LNode *r = ptr->next;
			ptr->next = ptr->next->next;
			free(r);
		} else {
			mp[abs(ptr->next->data)] = true;
			ptr = ptr->next;	
		}
	}
}

int main() {
    LinkedList L;
    InitList(L);

    // 插入
    ListAppend(L, 2);
    ListAppend(L, 5);
    ListAppend(L, -2);
    ListAppend(L, 7);
    ListAppend(L, -5);
    ListAppend(L, 6);
    PrintList(L);

	DelAbsEqulNum(L);
	PrintList(L);
	
	return 0;
}
